import 'package:flutter/services.dart';
import 'package:libphonenumber/libphonenumber.dart';
import 'package:xws/utils/log_util.dart';

/// 首页hero交互用的heroTag
const String homeHeroTag = 'home_{item}_';

/// 发布页hero交互用的heroTag
const String pushHeroTag = 'push_{item}_';

/// 反馈页hero交互用的heroTag
const String feedHeroTag = 'feed_{item}_';

String km(double distance) {
  try {
    if (distance <= 0) return '<1m';
    if (distance > 30000) return '>30km';
    if (distance >= 1000) return (distance / 1000).toStringAsFixed(1) + 'km';

    return distance.toStringAsFixed(0) + 'm';
  } catch (e) {
    return '未知';
  }
}

/// 移除字符串中的Emoji
String removeEmoji(String str) {
  try {
    String s = str;

    final RegExp regExp = RegExp(
        r'(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|\ud83c[\ude32-\ude3a]|\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])');

    if (s.contains(regExp)) s = s.replaceAll(regExp, '');

    return s;
  } catch (e) {
    error('移除字符串中的Emoji出错:$e');
    return str;
  }
}

/// 成色
const Map<String, String> qualities = <String, String>{
  'NEW': '全新',
  'AGE9': '9成新',
  'AGE8': '8成新',
  'AGE7': '7成新',
  'LE7': '7成以下',
};

/// 获取成色
String getQualityValue(String? k) {
  try {
    return qualities[k].toString();
  } catch (e) {
    return '未知';
  }
}

/// 物品发布时间
String getGoodsPubDate(String d) {
  if (d.isEmpty) return '';

  final int pd = DateTime.now().difference(DateTime.parse(d)).inHours;
  if (pd < 24) return pd.toString() + '小时前';

  return d.split('T').first;
}

/// 评论发布时间
String commentDate(String d) {
  try {
    if (d.isEmpty) return '';

    final Duration pd = DateTime.now().difference(DateTime.parse(d));

    if (pd.inSeconds < 60)
      return '刚刚';
    else if (pd.inMinutes < 60)
      return pd.inMinutes.toString() + '分钟前';
    else if (pd.inHours < 24) return pd.inHours.toString() + '小时前';

    return d.replaceAll('T', ' ');
  } catch (e) {
    return d;
  }
}

/// 时间
String getDurationDate(String d) {
  try {
    if (d.isEmpty) return '';

    final Duration pd = DateTime.now().difference(DateTime.parse(d));

    if (pd.inSeconds < 60)
      return '刚刚';
    else if (pd.inMinutes < 60)
      return pd.inMinutes.toString() + '分钟前';
    else if (pd.inHours < 24) return pd.inHours.toString() + '小时前';

    return d.split('T').first;
  } catch (e) {
    return d;
  }
}

/// 只允许输入数字
List<TextInputFormatter> get onlyNum => <TextInputFormatter>[
      FilteringTextInputFormatter.allow(RegExp('[0-9]')),
    ];

/// 只允许输入数字和字母
List<TextInputFormatter> get onlyNumEn => <TextInputFormatter>[
      FilteringTextInputFormatter.allow(RegExp('[0-9a-zA-Z]')),
    ];

/// 禁止输入空格
List<TextInputFormatter> get noSpace => <TextInputFormatter>[
      FilteringTextInputFormatter.deny(RegExp('[ ]')),
    ];

/// 禁止输入特殊字符
List<TextInputFormatter> get noSpecil => <TextInputFormatter>[
      FilteringTextInputFormatter.deny(
        RegExp(
            '[^\\u0020-\\u007E\\u00A0-\\u00BE\\u2E80-\\uA4CF\\uF900-\\uFAFF\\uFE30-\\uFE4F\\uFF00-\\uFFEF\\u0080-\\u009F\\u2000-\\u201f\r\n]'),
      ),
    ];

/// 手机号格式是否正确
Future<bool> isPhone(String tel) async {
  try {
    return await PhoneNumberUtil.isValidPhoneNumber(phoneNumber: tel, isoCode: 'CN') ?? false;
  } catch (e) {
    error('msg');
    return false;
  }
}
